home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 32 / Mac Magazin and MacEasy Magazine CD - Issue 32.iso / Grafik & Text / OzTeX3.0 / TeX-inputs / LaTeX / tools / multicol.sty < prev    next >
Text File  |  1997-03-07  |  20KB  |  686 lines

  1. %%
  2. %% This is file `multicol.sty',
  3. %% generated with the docstrip utility.
  4. %%
  5. %% The original source files were:
  6. %%
  7. %% multicol.dtx  (with options: `package,badness,check,marktrace')
  8. %% 
  9. %% IMPORTANT NOTICE:
  10. %% 
  11. %% This file is a generated file from the sources of the `tools' bundle
  12. %% in the LaTeX2e distribution.
  13. %% 
  14. %% For the copyright notice see the source file(s).
  15. %% 
  16. %% You are not allowed to modify this file.
  17. %% 
  18. %% You are allowed to distribute this file if and only if
  19. %% it is distributed with the corresponding source files in
  20. %% the `tools' bundle.
  21. %% 
  22. %% For the copying and distribution conditions of the source files,
  23. %% see the file readme.txt distributed with the tools bundle.
  24. %% 
  25. %% Package `multicol' to use with LaTeX2e
  26. %% Copyright (C) 1989-1996 Frank Mittelbach, all rights reserved.
  27. %%
  28. %%
  29. %% In addition to the general distribution terms for this `tools'
  30. %% bundle, which are specified in readme.txt, this package, multicol,
  31. %% is distributed subject to the following condition:
  32. %%
  33. %% ** The use of this package as part of a commercial application is
  34. %% ** not allowed without the explicit permission of the author of
  35. %% ** this package.  Such commercial usage will be subject to the
  36. %% ** payment of a license fee.  The size of this fee is to be
  37. %% ** determined, in each instance, by the commercial user, depending
  38. %% ** on his judgment of the value of the code for his application.
  39. %%
  40. %%
  41. %% Note that the above condition does not apply to non-commercial use
  42. %% of this package, or to the use of this package in a commercial
  43. %% environment for `private' tasks rather than as part of a commercial
  44. %% application. In these cases the General Terms, as specified in
  45. %% readme.txt, apply.
  46. %%
  47. %% The term `private' tasks in a commercial environment refers to the
  48. %% use of multicol to format documents received by others, for example,
  49. %% to format the documentation of a package which often uses multicol
  50. %% internally. It also refers to the generation of documents that are
  51. %% intended to be available free of charge. It does not refer to the
  52. %% act of producing a commercial product, eg, a book or a
  53. %% journal. Such usage require a license fee.
  54. %% In that case please send email to
  55. %%
  56. %%   Frank.Mittelbach@Uni-Mainz.de
  57. %%
  58. \NeedsTeXFormat{LaTeX2e}
  59. \ProvidesPackage{multicol}
  60.           [1996/01/13 v1.5l  multicolumn formatting (FMi)]
  61. %% \CheckSum{1298}
  62. %% \CharacterTable
  63. %%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
  64. %%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
  65. %%   Digits        \0\1\2\3\4\5\6\7\8\9
  66. %%   Exclamation   \!     Double quote  \"     Hash (number) \#
  67. %%   Dollar        \$     Percent       \%     Ampersand     \&
  68. %%   Acute accent  \'     Left paren    \(     Right paren   \)
  69. %%   Asterisk      \*     Plus          \+     Comma         \,
  70. %%   Minus         \-     Point         \.     Solidus       \/
  71. %%   Colon         \:     Semicolon     \;     Less than     \<
  72. %%   Equals        \=     Greater than  \>     Question mark \?
  73. %%   Commercial at \@     Left bracket  \[     Backslash     \\
  74. %%   Right bracket \]     Circumflex    \^     Underscore    \_
  75. %%   Grave accent  \`     Left brace    \{     Vertical bar  \|
  76. %%   Right brace   \}     Tilde         \~}
  77. %%
  78. \DeclareOption{twocolumn}
  79.    {\PackageWarning{multicol}{May not work
  80.              with a twocolumn layout}}
  81. \newcount\c@tracingmulticols
  82. \DeclareOption{errorshow}
  83.     {\c@tracingmulticols\z@}
  84. \DeclareOption{infoshow}
  85.     {\c@tracingmulticols\@ne}
  86. \DeclareOption{balancingshow}
  87.     {\c@tracingmulticols\tw@}
  88. \DeclareOption{markshow}
  89.     {\c@tracingmulticols\thr@@}
  90. \DeclareOption{debugshow}
  91.     {\c@tracingmulticols5\relax}
  92. \ProcessOptions
  93. \def\multicols#1{\col@number#1\relax
  94.   \ifnum\col@number<\tw@
  95.      \PackageWarning{multicol}%
  96.       {Using `\number\col@number'
  97.        columns doesn't seem a good idea.^^J
  98.        I therefore use two columns instead}%
  99.      \col@number\tw@ \fi
  100.   \ifnum\col@number>10
  101.      \PackageError{multicol}%
  102.       {Too many columns}%
  103.       {Current implementation doesn't
  104.        support more than 10 columns.%
  105.        \MessageBreak
  106.        I therefore use 10 columns instead}%
  107.      \col@number10 \fi
  108.   \@ifnextchar[\mult@cols{\mult@cols[]}}
  109. \def\mult@cols[#1]{\@ifnextchar[%
  110.   {\mult@@cols{#1}}%
  111.   {\mult@@cols{#1}[\premulticols]}}
  112. \def\mult@@cols#1[#2]{%
  113.   \par
  114.   \ifinner \@boxedmulticolstrue
  115.   \else
  116.     \ifnum \doublecol@number>\z@
  117.        \@boxedmulticolstrue
  118.     \fi
  119.   \fi
  120.   \mult@info\z@
  121.       {Starting environment with
  122.        \the\col@number\space columns%
  123.         \if@boxedmulticols\MessageBreak
  124.            (boxed mode)\fi
  125.       }%
  126.    \enough@room{#2}%
  127.    {#1\par}\addvspace\multicolsep
  128.    \begingroup
  129.      \prepare@multicols
  130.      \if@boxedmulticols
  131.        \setbox\mult@box\vbox\bgroup
  132.      \fi
  133.      \ignorespaces}
  134. \newif\if@boxedmulticols
  135. \@boxedmulticolsfalse
  136. \newbox\mult@box
  137. \def\enough@room#1{%
  138.    \if@boxedmulticols\else
  139.    \par
  140.    \bgroup\@nobreakfalse\addpenalty\z@\egroup
  141.    \page@free \pagegoal
  142.    \advance \page@free -\pagetotal
  143.      \@tempskipa#1\relax
  144.    \mult@info\z@
  145.        {Current page:\MessageBreak
  146.         height=%
  147.         \the\pagegoal: used \the\pagetotal
  148.         \space -> free=\the\page@free
  149.         \MessageBreak
  150.         needed \the\@tempskipa
  151.               \space(for #1)}%
  152.    \ifdim \page@free <#1\newpage \fi
  153.   \fi}
  154. \def\prepare@multicols{%
  155.   \multicol@leftmargin\@totalleftmargin
  156.   \@totalleftmargin\z@
  157.   \parshape\z@
  158.   \doublecol@number\col@number
  159.   \multiply\doublecol@number\tw@
  160.   \advance\doublecol@number\mult@rightbox
  161.   \if@boxedmulticols
  162.     \let\l@kept@firstmark\kept@firstmark
  163.     \let\l@kept@botmark\kept@botmark
  164.     \global\let\kept@firstmark\@empty
  165.     \global\let\kept@botmark\@empty
  166.   \else
  167.     \nointerlineskip {\topskip\z@\null}%
  168.     \output{%
  169.       \global\setbox\partial@page\vbox
  170.         {%
  171.          \ifvoid\partial@page\else
  172.            \PackageError{multicol}%
  173.             {Error saving partial page}%
  174.             {The part of the page before
  175.              the multicols environment was
  176.              nearly full with^^Jthe result
  177.              that starting the environment
  178.              will produce an overfull
  179.              page.  Some^^Jtext may be lost!
  180.              Please increase \premulticols
  181.              either generally or for this%
  182.              ^^Jenvironment by specifying a
  183.              suitable value in the second
  184.              optional argument to^^Jthe
  185.              multicols environment.}
  186.            \unvbox\partial@page
  187.            \box\last@line
  188.          \fi
  189.          \unvbox\@cclv
  190.          \global\setbox\last@line\lastbox
  191.         }%
  192.            \prep@keptmarks
  193.            \global\let\kept@topmark\firstmark
  194.           }\eject
  195.     \advance\@colroom-\ht\partial@page
  196.     \set@mult@vsize\relax
  197.     \output{\multi@column@out}%
  198.     \init@mult@footins
  199.     \reinsert@footnotes
  200.   \fi
  201.   \vbadness\@Mi \hbadness5000
  202.   \tolerance\multicoltolerance
  203.   \pretolerance\multicolpretolerance
  204.   \setemergencystretch\col@number\hsize
  205.   \set@floatcmds
  206.   \advance\baselineskip\multicolbaselineskip
  207.   \hsize\linewidth \advance\hsize\columnsep
  208.   \advance\hsize-\col@number\columnsep
  209.   \divide\hsize\col@number
  210.   \full@width\linewidth
  211.   \linewidth\hsize
  212. }
  213. \def\init@mult@footins{%
  214.     \multiply\count\footins\col@number
  215.     \multiply\skip \footins\col@number
  216. }
  217. \def\set@mult@vsize#1{%
  218.     \vsize\@colroom
  219.     \@tempdima\baselineskip
  220.     \advance\@tempdima-\topskip
  221.     \advance\vsize\@tempdima
  222.     \vsize\col@number\vsize
  223.     \advance\vsize-\@tempdima
  224.     #1\advance\vsize
  225.         \c@collectmore\baselineskip}
  226. \newdimen\multicol@leftmargin
  227. \def\endmulticols{\par
  228.   \if@boxedmulticols
  229.     \egroup
  230.     \balance@columns
  231.     \return@nonemptymark{first}%
  232.                  \kept@firstmark
  233.     \return@nonemptymark{bot}%
  234.                   \kept@botmark
  235.     \page@sofar
  236.     \global\let\kept@firstmark
  237.                \l@kept@firstmark
  238.     \global\let\kept@botmark
  239.             \l@kept@botmark
  240.     \mult@info\tw@
  241.       {Restore kept marks to\MessageBreak
  242.        first: \meaning\kept@firstmark
  243.        \MessageBreak bot\space\space:
  244.                      \meaning\kept@botmark }%
  245.   \else
  246.    \penalty\z@
  247.     \output{\balance@columns@out}\eject
  248.     \ifvbox\partial@page
  249.          \unvbox\partial@page\fi
  250.      \global\let\kept@firstmark\@empty
  251.      \global\let\kept@botmark\@empty
  252.      \mult@info\tw@
  253.        {Make kept marks empty}%
  254.   \fi
  255.   \@checkend{multicols}%
  256.   \endgroup
  257.   \if@boxedmulticols\else
  258.     \reinsert@footnotes
  259.   \fi
  260.   \global\c@unbalance\z@
  261.   \enough@room\postmulticols
  262.   \addvspace\multicolsep
  263.   \mult@info\z@
  264.      {Ending environment
  265.              \if@boxedmulticols
  266.                 \space(boxed mode)\fi
  267.               }}
  268. \newcount\c@unbalance
  269. \newcount\c@collectmore
  270. \newcount\doublecol@number
  271. \newcount\multicoltolerance
  272. \newcount\multicolpretolerance
  273. \newdimen\full@width
  274. \newdimen\page@free
  275. \newdimen\premulticols
  276. \newdimen\postmulticols
  277. \newskip\multicolsep
  278. \newskip\multicolbaselineskip
  279. \newbox\partial@page
  280. \newbox\last@line
  281. \c@unbalance   = 0
  282. \c@collectmore = 0
  283. \col@number = 1
  284. \multicoltolerance = 9999
  285. \multicolpretolerance = -1
  286. \premulticols = 50pt
  287. \postmulticols= 20pt
  288. \multicolsep = 12pt plus 4pt minus 3pt
  289. \multicolbaselineskip=0pt
  290. \def\process@cols#1#2{\count@#1\relax
  291.      \loop
  292.       #2%
  293.      \advance\count@\tw@
  294.      \ifnum\count@<\doublecol@number
  295.    \repeat}
  296. \def\page@sofar{%
  297.    \process@cols\mult@rightbox
  298.        {\ifvoid\count@
  299.           \setbox\count@\hbox to\hsize{}%
  300.         \else
  301.           \wd\count@\hsize
  302.         \fi}%
  303.    \mult@info\z@
  304.     {Column spec:\MessageBreak
  305.        (\the\multicol@leftmargin\space -->
  306.         \the\full@width\space = \the\hsize
  307.         \space x \the\col@number)%
  308.      }%
  309. \ifvmode\else\errmessage{Multicol Error}\fi
  310.    \moveright\multicol@leftmargin
  311.     \hbox to\full@width{%
  312.      \process@cols\mult@gfirstbox{\box\count@
  313.        \hss\vrule\@width\columnseprule\hss}%
  314.      \box\mult@rightbox
  315.       \rlap{\phantom p}%
  316. }%
  317. }
  318. \def\reinsert@footnotes{\ifvoid\footins\else
  319.          \insert\footins{}\fi}
  320. \def\multi@column@out{%
  321.    \ifnum\outputpenalty <-\@M
  322.    \speci@ls \else
  323.    \splittopskip\topskip
  324.    \splitmaxdepth\maxdepth
  325.    \dimen@\@colroom
  326.    \divide\skip\footins\col@number
  327.    \ifvoid\footins \else
  328.       \leave@mult@footins
  329.    \fi
  330.    \process@cols\mult@gfirstbox{%
  331.         \setbox\count@
  332.             \vsplit\@cclv to\dimen@
  333.             \set@keptmarks
  334.             \ifshr@nking
  335.               \setbox\count@
  336.                  \vbox to\dimen@
  337.                   {\unvbox\count@\vfill}%
  338.             \fi
  339.            }%
  340.    \setbox\mult@rightbox
  341.        \vsplit\@cclv to\dimen@
  342.    \set@keptmarks
  343.    \ifshr@nking
  344.       \setbox\mult@rightbox\vbox to\dimen@
  345.           {\unvbox\mult@rightbox\vfill}%
  346.    \fi
  347.    \ifvoid\@cclv \else
  348.        \unvbox\@cclv
  349.        \penalty\outputpenalty
  350.        \ifvoid\footins\else
  351.          \PackageWarning{multicol}%
  352.           {I moved some lines to
  353.            the next page.\MessageBreak
  354.            Footnotes on page
  355.            \thepage\space might be wrong}%
  356.        \fi
  357.        \ifnum \c@tracingmulticols>\thr@@
  358.                     \hrule\allowbreak \fi
  359.    \fi
  360.    \ifx\@empty\kept@firstmark
  361.       \let\firstmark\kept@topmark
  362.       \let\botmark\kept@topmark
  363.    \else
  364.       \let\firstmark\kept@firstmark
  365.       \let\botmark\kept@botmark
  366.    \fi
  367.    \let\topmark\kept@topmark
  368.    \mult@info\tw@
  369.         {Use kept top mark:\MessageBreak
  370.           \meaning\kept@topmark
  371.          \MessageBreak
  372.          Use kept first mark:\MessageBreak
  373.           \meaning\kept@firstmark
  374.         \MessageBreak
  375.          Use kept bot mark:\MessageBreak
  376.           \meaning\kept@botmark
  377.         \MessageBreak
  378.          Produce first mark:\MessageBreak
  379.           \meaning\firstmark
  380.         \MessageBreak
  381.         Produce bot mark:\MessageBreak
  382.           \meaning\botmark
  383.          \@gobbletwo}%
  384.    \setbox\@cclv\vbox{\unvbox\partial@page
  385.                       \page@sofar}%
  386.    \@makecol\@outputpage
  387.      \global\let\kept@topmark\botmark
  388.      \global\let\kept@firstmark\@empty
  389.      \global\let\kept@botmark\@empty
  390.      \mult@info\tw@
  391.         {(Re)Init top mark:\MessageBreak
  392.          \meaning\kept@topmark
  393.          \@gobbletwo}%
  394.    \global\@colroom\@colht
  395.    \process@deferreds
  396.    \@whilesw\if@fcolmade\fi{\@outputpage
  397.       \global\@colroom\@colht
  398.       \process@deferreds}%
  399.    \mult@info\@ne
  400.      {Colroom:\MessageBreak
  401.       \the\@colht\space
  402.               after float space removed
  403.               = \the\@colroom \@gobble}%
  404.     \set@mult@vsize \global
  405.   \fi}
  406. \def\leave@mult@footins{%
  407.    \advance\dimen@-\skip\footins
  408.    \advance\dimen@-\ht\footins
  409. }
  410. \def\speci@ls{%
  411.  \ifnum\outputpenalty <-\@Mi
  412.    \PackageWarning{multicol}%
  413.            {Floats and marginpars not
  414.             allowed inside `multicols'
  415.             environment!
  416.            \@gobble}%
  417.    \unvbox\@cclv\reinsert@footnotes
  418.    \xdef\@freelist{\@freelist\@currlist}%
  419.    \gdef\@currlist{}%
  420.  \else \@doclearpage \fi
  421. }
  422. \def\process@deferreds{%
  423.    \@floatplacement
  424.    \@tryfcolumn\@deferlist
  425.    \if@fcolmade\else
  426.      \begingroup
  427.     \let\@tempb\@deferlist
  428.       \gdef\@deferlist{}%
  429.       \let\@elt\@scolelt
  430.         \@tempb \endgroup
  431.    \fi}
  432. \newif\ifshr@nking
  433. \def\raggedcolumns{%
  434.    \@bsphack\shr@nkingtrue\@esphack}
  435. \def\flushcolumns{%
  436.    \@bsphack\shr@nkingfalse\@esphack}
  437. \def\balance@columns@out{%
  438.    \setbox\mult@box\vbox{\unvbox\@cclv}%
  439.    \balance@columns
  440.    \global\vsize\@colroom
  441.    \global\advance\vsize\ht\partial@page
  442.    \unvbox\partial@page
  443.    \return@nonemptymark{first}\kept@firstmark
  444.    \return@nonemptymark{bot}\kept@botmark
  445.    \page@sofar
  446.    \penalty\z@
  447. }
  448. \def\balance@columns{%
  449.    \get@keptmarks\mult@box
  450.    \setbox\mult@box\vbox{%
  451.         \penalty-\@M
  452.         \unvbox\mult@box
  453.         \remove@discardable@items
  454.         }%
  455.    \@tempdima\topskip
  456.    \splittopskip\@tempdima
  457.        \@plus\multicolundershoot
  458.        \@minus\multicolovershoot
  459.    \splitmaxdepth\maxdepth
  460.    \setbox\@tempboxa\vsplit\mult@box to\z@
  461.    \@tempdima\ht\mult@box
  462.    \advance\@tempdima\dp\mult@box
  463.    \divide\@tempdima\col@number
  464.    \count@\@tempdima
  465.    \divide\count@\baselineskip
  466.    \dimen@\count@\baselineskip
  467.    \advance\dimen@\topskip
  468.    \ifdim \dimen@ >\@tempdima
  469.      \advance\dimen@-\baselineskip
  470.    \fi
  471.    \advance\dimen@\c@unbalance\baselineskip
  472.    \mult@info\@ne
  473.       {Balance columns\on@line:
  474.         \ifnum\c@unbalance=\z@\else
  475.        (off balance=\number\c@unbalance)\fi
  476.       \@gobbletwo}%
  477.    \ifnum\dimen@<\topskip
  478.      \mult@info\@ne
  479.        {Start value
  480.           \the\dimen@  \space ->
  481.           \the\topskip \space (corrected)}%
  482.      \dimen@\topskip
  483.    \fi
  484.    \vbadness\@M
  485.    \vfuzz \col@number\baselineskip
  486.    \last@try-\p@
  487.    \loop
  488.     {\process@cols\mult@grightbox
  489.            {\global\setbox\count@
  490.                    \box\voidb@x}}%
  491.     \global\setbox\mult@grightbox
  492.            \copy\mult@box
  493.    \global\too@badfalse
  494.    {\process@cols\mult@firstbox{%
  495.          \global\setbox\count@
  496.          \vsplit\mult@grightbox to\dimen@
  497.          \ifnum\c@tracingmulticols>\@ne
  498.            \@tempcnta\count@
  499.            \advance\@tempcnta-\mult@grightbox
  500.            \divide\@tempcnta \tw@
  501.            \message{^^JColumn
  502.               \number\@tempcnta\space
  503.                badness: \the\badness\space}%
  504.          \fi
  505.          \ifnum\badness>\c@columnbadness
  506.            \ifnum\c@tracingmulticols>\@ne
  507.              \message{too bad
  508.                   (>\the\c@columnbadness)}%
  509.            \fi
  510.            \global\too@badtrue
  511.          \fi
  512.                         }}%
  513.    \boxmaxdepth\maxdepth
  514.    \global\setbox\mult@grightbox
  515.       \vbox{\unvbox\mult@grightbox}%
  516.    \setbox\mult@nat@firstbox
  517.       \vbox{\unvcopy\mult@firstbox}%
  518.     \ifnum\c@tracingmulticols>\@ne
  519.        \message{^^JFirst column
  520.            = \the\dimen@\space
  521.            (\the\ht\mult@nat@firstbox)}\fi
  522.     \ifshr@nking
  523.       \global\setbox\mult@firstbox
  524.              \copy\mult@nat@firstbox
  525.     \fi
  526.     \ifnum\c@tracingmulticols>\@ne
  527.       \message{<> last column =
  528.                \the\ht\mult@grightbox^^J}%
  529.      \fi
  530.     \ifdim\ht\mult@grightbox >\dimen@
  531.       \too@badtrue
  532.     \else
  533.       \global\setbox\mult@grightbox
  534.          \vbox to\dimen@
  535.             {\unvbox\mult@grightbox}%
  536.       \ifnum\c@tracingmulticols>\@ne
  537.         \message{Final badness:
  538.                  \the\badness}%
  539.       \fi
  540.       \ifnum\badness>\c@finalcolumnbadness
  541.         \global\setbox\mult@grightbox
  542.          \vbox to\dimen@
  543.               {\unvbox\mult@grightbox\vfill}%
  544.          \ifnum\c@tracingmulticols>\@ne
  545.            \message{ setting natural
  546.               (> \the\c@finalcolumnbadness)}%
  547.          \fi
  548.       \fi
  549.     \fi
  550.     \ifdim\ht\mult@nat@firstbox<\dimen@
  551.       \ifdim\ht\mult@nat@firstbox>\last@try
  552.         \too@badtrue
  553.         \dimen@\ht\mult@nat@firstbox
  554.         \last@try\dimen@
  555.         \advance\dimen@-\p@
  556.       \fi
  557.     \fi
  558.     \iftoo@bad
  559.       \advance\dimen@\p@
  560.     \repeat
  561.    \dimen@\ht\mult@firstbox
  562.    \ifdim\dimen@>\@colroom
  563.       \dimen@\@colroom
  564.    \fi
  565.    \process@cols\mult@rightbox
  566.        {\@tempcnta\count@
  567.         \advance\@tempcnta\@ne
  568.         \setbox\count@\vbox to\dimen@
  569.            {%
  570.             \vskip \z@
  571.               \@plus-\multicolundershoot
  572.               \@minus-\multicolovershoot
  573.             \unvbox\@tempcnta
  574.             \ifshr@nking\vfill\fi}}%
  575. }
  576. \newbox\mult@rightbox
  577. \newbox\mult@grightbox
  578. \newbox\mult@gfirstbox
  579. \newbox\mult@firstbox
  580. \newbox\@tempa\newbox\@tempa
  581. \newbox\@tempa\newbox\@tempa
  582. \newbox\@tempa\newbox\@tempa
  583. \newbox\@tempa\newbox\@tempa
  584. \newbox\@tempa\newbox\@tempa
  585. \newbox\@tempa\newbox\@tempa
  586. \newbox\@tempa\newbox\@tempa
  587. \newbox\@tempa\newbox\@tempa
  588. \newbox\@tempa
  589. \let\@tempa\relax
  590. \@ifundefined{emergencystretch}
  591.      {\newdimen\emergencystretch}{}
  592. \def\setemergencystretch#1#2{%
  593.    \emergencystretch 4pt
  594.    \multiply\emergencystretch#1}
  595.  
  596. \def\set@floatcmds{%
  597.  \let\@dblfloat\@dbflt
  598.  \def\end@dblfloat{\par
  599.    \vskip\z@
  600.    \egroup
  601.    \color@endbox
  602.    \@largefloatcheck
  603.    \outer@nobreak
  604.    \ifnum\@floatpenalty<\z@
  605.      \@cons\@deferlist\@currbox
  606.    \fi
  607.    \ifnum\@floatpenalty=-\@Mii
  608.      \@Esphack
  609.    \fi}}
  610. \def\kept@topmark{{}{}}
  611. \let\kept@firstmark\@empty
  612. \let\kept@botmark\@empty
  613. \def\return@nonemptymark#1#2{%
  614.   \ifx#2\@empty
  615.   \else
  616.     \mult@info\tw@
  617.       {Returned #1 mark:\MessageBreak
  618.        \meaning#2}%
  619.     \toks@\expandafter{#2}%
  620.     \mark{\the\toks@}%
  621.     \nobreak
  622.   \fi}
  623. \def\get@keptmarks#1{%
  624.   \begingroup
  625.    \vbadness\@M
  626.    \setbox#1\copy#1%
  627.    \setbox#1\vsplit#1to\maxdimen
  628.    \set@keptmarks
  629.  \endgroup
  630. }
  631. \def\set@keptmarks{%
  632.    \ifx\kept@firstmark\@empty
  633.      \expandafter\gdef\expandafter
  634.         \kept@firstmark
  635.         \expandafter{\splitfirstmark}%
  636.      \ifx\kept@firstmark\@empty\else
  637.        \mult@info\tw@
  638.          {Set kept first mark:\MessageBreak
  639.           \meaning\kept@firstmark%
  640.           \@gobbletwo}%
  641.      \fi
  642.    \fi
  643.    \expandafter\def\expandafter\@tempa
  644.       \expandafter{\splitbotmark}%
  645.    \ifx\@tempa\@empty\else
  646.       \global\let\kept@botmark\@tempa
  647.       \mult@info\tw@
  648.         {Set kept bot mark:\MessageBreak
  649.          \meaning\kept@botmark%
  650.          \@gobbletwo}%
  651.    \fi}%
  652. \def\prep@keptmarks{%
  653.    \if@boxedmulticols \else
  654.      \get@keptmarks\partial@page
  655.    \fi}
  656. \def\remove@discardable@items{%
  657.         \unskip\unpenalty\unkern
  658.         \unskip\unpenalty\unkern
  659.         \unskip\unpenalty\unkern
  660.         \unskip\unpenalty\unkern
  661. }
  662. \newif\iftoo@bad
  663. \newcount\c@columnbadness
  664. \c@columnbadness=10000
  665. \newcount\c@finalcolumnbadness
  666. \c@finalcolumnbadness=9999
  667.  
  668. \newdimen\last@try
  669.  
  670. \newdimen\multicolovershoot
  671. \multicolovershoot=2pt
  672. \newdimen\multicolundershoot
  673. \multicolundershoot=2pt
  674. \newbox\mult@nat@firstbox
  675. \def\mult@info#1#2{%
  676.   \ifnum\c@tracingmulticols>#1%
  677.    \GenericWarning
  678.        {(multicol)\@spaces\@spaces}%
  679.        {Package multicol: #2}%
  680.   \fi
  681. }
  682.  
  683. \endinput
  684. %%
  685. %% End of file `multicol.sty'.
  686.